package com.robert.BCH;

public class bchEncode {
    /**
     * 在这里有编码函数和生成随机消息的函数
     */

    /**
     * 编码函数
     * @param msg 消息
     * @param p 公共参数
     * @param pc 预计算的参数
     * @param iPoly 选择的第i个生成多项式
     */
    public int[] encode(polynomial msg, parameters p, preCompute pc, int iPoly){
        //gx为选择的第i个多项式
        polynomial gx = pc.getGenPoly()[iPoly];
        polynomial code = gx.multiply(msg);
        int lc = code.getNums().length;
        return code.extend(p.getN()-lc);
    }

    /**
     * 生成随机消息
     * @param pc 预计算的参数
     * @param iPoly 选择的第i个生成多项式
     * @return 消息的多项式
     */
    public polynomial genRandomMsg(preCompute pc, int iPoly){
        //lMsg是消息向量的长度
        int lMsg = pc.getMsgBits()[iPoly];
        double r;
        int[] ans = new int[lMsg];
        for(int i=0;i<lMsg;i++){
            r = Math.random();
            if(r<0.5) ans[i] = 1;
        }
        return new polynomial(ans);
    }
}
